package com.fdb.efp.nls.service.dao.sx;

import com.fdb.efp.nls.service.domain.sx.NlsCreditInfo;
import com.fdb.efp.nls.service.vo.sx.NlsCreditInfoVO;
import com.fdb.basic.framework.core.bean.SedSynCusManageVO;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.session.RowBounds;

import java.math.BigDecimal;
import java.util.List;

/**
 * <p>DAO interface:网贷授信申请表				<p>
 *
 * @author ligm
 * @date 2019-03-04
 */
public interface NlsCreditInfoDao {

	public int insertNlsCreditInfo(NlsCreditInfo nlsCreditInfo);

	public int deleteByPk(NlsCreditInfo nlsCreditInfo);

	public int updateByPk(NlsCreditInfo nlsCreditInfo);

	public NlsCreditInfo queryByPk(NlsCreditInfo nlsCreditInfo);

	public NlsCreditInfo queryCopy(NlsCreditInfo nlsCreditInfo);

	public List<NlsCreditInfo> queryAllOwnerByPage(NlsCreditInfoVO nlsCreditInfo);

	public List<NlsCreditInfo> queryAllByCondition(NlsCreditInfoVO nlsCreditInfo);

	public List<NlsCreditInfo> queryAllCurrOrgByPage(NlsCreditInfoVO nlsCreditInfo);

	public List<NlsCreditInfo> queryAllCurrDownOrgByPage(NlsCreditInfoVO nlsCreditInfo);

	public List<NlsCreditInfo> queryAllCurrOwnerPrdByPage(NlsCreditInfoVO nlsCreditInfo);

	public List<NlsCreditInfoVO> queryCertCode(NlsCreditInfoVO nlsCreditInfoVO);

	/**
	 * 同步授信申请正式表有数据则更新，无则新增 <br>
	 * 0.1:ludayong:2019年5月10日 下午3:35:56:新增 <br>
	 *
	 * @author ludayong
	 * @date 2019年5月10日 下午3:35:56
	 * @version 0.1
	 * @since 2019年5月10日 下午3:35:56
	 */
	public int insertOrUpdateNlsCreditInfo(List<NlsCreditInfo> nlsCreditInfoVOList);

	/**
	 * 根据用信bd_transaction_id查询对应的授信申请: <br>
	 * <p>
	 * 0.1:caoxin:2019/6/10 8:11: <br>
	 *
	 * @return
	 * @author caoxin
	 * @date 2019/6/10 8:11
	 * @version 0.1
	 * @since 2019/6/10 8:11
	 */
    NlsCreditInfo queryByTransactionId(@Param("bdTransactionId") String bdTransactionId);

	/**
	 * 通过身份证号和身份证证件类型判断 一个用户是否存在多个授信: <br>
	 * <p>
	 * 0.1:caoxin:2019/4/18 14:56: TODO: <br>
	 *
	 * @return
	 * @author caoxin
	 * @date 2019/4/18 14:56
	 * @version 0.1
	 * @since 2019/4/18 14:56
	 */

	List<NlsCreditInfo> countPeopelHasCredits(NlsCreditInfo nlsCreditInfo);

	/**
	 * TODO <br>
	 *
	 * @author wanglihua
	 * @date 2019年4月19日 下午5:48:33
	 * @version 0.1
	 * @since 2019年4月19日 下午5:48:33
	 */
	public NlsCreditInfo queryContractEle(NlsCreditInfo nlsCreditInfo);

	/**
	 * TODO <br>
	 *
	 * @author wanglihua
	 * @date 2019年4月30日 下午3:47:15
	 * @version 0.1
	 * @since 2019年4月30日 下午3:47:15
	 */
	public NlsCreditInfo queryByLmtApplySeq(String lmtApplySeq);

	/**
	 * TODO 将申请金额和审批金额更新为测算额度<br>
	 *
	 * @author wanglihua
	 * @date 2019年5月8日 下午7:25:04
	 * @version 0.1
	 * @since 2019年5月8日 下午7:25:04
	 */
	public int updateAmtByApplySeq(NlsCreditInfo nlsCreditInfo);

	/**
	 * TODO 将审批状态更新为拒绝<br>
	 *
	 * @param apprvSts
	 * @author wanglihua
	 * @date 2019年5月8日 下午7:25:04
	 * @version 0.1
	 * @since 2019年5月8日 下午7:25:04
	 */
	public int updateApprvSts(@Param("apprvSts") String apprvSts, @Param("lmtApplySeq") String applySeq);

	/**
	 * 获取需要进行文件上传的审批通过的授信流水号
	 *
	 * @param recordsNum
	 * @param bizType
	 * @return
	 */
	public List<NlsCreditInfo> getNeedUploadList(@Param("recordsNum") Integer recordsNum, @Param("bizType") String bizType, @Param("prdId") String prdId);


	/**
	 * 根据产品获取四要素为空的授信数据
	 *
	 * @param prdId 产品编码
	 * @return 授信数据集
	 */
	public List<NlsCreditInfo> getFourElementsIfNullList(@Param("prdId") String prdId);

	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年5月21日 下午5:18:07
	 * 功能描述：通过证件类型、证件号码，查询在途、通过的授信信息
	 */
	public List<NlsCreditInfo> getCreditsBycust(NlsCreditInfo nlsCreditInfo);

	/**
	 * 需求编号：2019D0519<br/>
	 * 问题编号：<br/>
	 * 功能描述：通过创建时间模糊查询（最新更新时间为空）或最近更新时间模糊查询所有当天所有授信记录<br/>
	 * 开发人员：周才顺<br/>
	 * 创建时间：2019年5月27日 下午7:27:25<br/>
	 *
	 * @param nlsCreditInfoVO
	 * @return
	 * @author zhoucs1
	 * @version 1.0
	 * @since 1.0
	 */
	public List<NlsCreditInfo> queryAllByCurrentDate(NlsCreditInfoVO nlsCreditInfoVO);

	public int batchUpdateCusManage(@Param(value = "sedSynCusManageVO") List<SedSynCusManageVO> sedSynCusManageVO);

	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：qiuyf
	 * 创建日期：2019年6月24日 下午7:16:53
	 * 功能描述：根据不确定的条件数量唯一标识一条信息
	 */
	public NlsCreditInfo queryByCondition(NlsCreditInfo nlsCreditInfo);

	/**
	 * 需求编号：【额度管控】
	 * 问题编号：【根据授信有效期更新授信有效状态为作废】
	 * 开发人员：【chenxuan】
	 * 创建/修改日期：【2019/9/3】
	 * 修改描述：
	 *
	 * @return int
	 * @Param []
	 **/
    public int inValidLmtProContOverExpireDate(@Param("openDay") String openDay);

	/**
	 * 获取需要签章的授信申请记录
	 *
	 * @param prdId
	 * @param retryNum
	 * @param polFileType
	 * @param maxNum
	 * @return
	 */
	List<NlsCreditInfo> getSignatureNlsList(@Param("prdId") String prdId, @Param("retryNum") int retryNum, @Param("polFileType") String polFileType, @Param("maNum") int maxNum);

	/**
	 * 获取客户经理记录
	 *
	 * @param prdId
	 * @return
	 */
	List<NlsCreditInfo> getCusManagerRecord(@Param("prdId") String prdId, @Param("orgCode") String orgCode);

	NlsCreditInfo queryByPrdSeq(String preLmtApplySeq);

	public List<NlsCreditInfo> queryAllByConditionByPage(NlsCreditInfoVO nlsCreditInfo);

	/**
	 * 需求编号：【2019D1218】（普税贷需求）
	 * 问题编号：【2019D1218】（普税贷查询审批日期区间授信信息）
	 * 开发人员：【ludayong】
	 * 创建日期：【2020/3/18 12:26】
	 * 功能描述：
	 * 修改日期：【2020/3/18 12:26】
	 * 修改描述：
	 */
	public List<NlsCreditInfo> queryPsdBtApprvDateByPage(NlsCreditInfoVO nlsCreditInfoVO);

	/**
	 * 需求编号：【2019D1218】（普税贷需求）
	 * 问题编号：【2019D1218】（普税贷查询审批日期区间授信信息统计数据量）
	 * 开发人员：【ludayong】
	 * 创建日期：【2020/3/18 12:27】
	 * 功能描述：
	 * 修改日期：【2020/3/18 12:27】
	 * 修改描述：
	 */
	public int queryPsdBtApprvDateCount(NlsCreditInfoVO nlsCreditInfoVO);

	/**
	 * 根据全局流水号查询授信申请记录
	 *
	 * @param nlsCreditInfo
	 * @return
	 */
    List<NlsCreditInfo> selectByGlobalSerno(NlsCreditInfo nlsCreditInfo);

	List<NlsCreditInfo> selectByGmAndCertCode(String gm, String certCode);

	/**
	 * 根据预授信流水号查询授信申请记录
	 *
	 * @param preLmtApplySeq
	 * @return
	 */
	List<NlsCreditInfo> queryByPreLmtApplySeq(String preLmtApplySeq);

    BigDecimal queryArroveLimitTotal(@Param("prdId") String prdId);

	List<NlsCreditInfo> queryByPrdIdAndApprvSts(NlsCreditInfo nlsCreditInfo, RowBounds rowBounds);

    int countByPrdIdAndApprvSts(NlsCreditInfo nlsCreditInfo);

    List<NlsCreditInfo> queryInPreLmtApplySeq(@Param("list") List<String> list);

	/**
	 * 需求编号：【2019D0519】（业务提的需求编号）
	 * 问题编号：【xxxxxxx】（若不是因为修复问题而新增该类，则留空）
	 * 开发人员：
	 * 创建日期：2020年7月27日17:46:55
	 * 功能描述：通过证件类型、证件号码，查询在途的授信信息
	 */
	public int getCreditsByCondition(NlsCreditInfo nlsCreditInfo);

	public List<NlsCreditInfo> queryCreditDuring(@Param("certType")String certType,@Param("certCode")String certCode,@Param("prdId")String prdId,@Param("applySeq")String applySeq);
	public int updateAcctNo(NlsCreditInfo nlsCreditInfo);
}
